#pragma once

#include <binder/IBinder.h>
#include <binder/IInterface.h>
#include <binder/Status.h>
#include <cstdint>
#include <utils/String16.h>
#include <utils/StrongPointer.h>
#include <vector>

namespace com {

namespace bose {

class IBoseCmd : public ::android::IInterface {
public:
  DECLARE_META_INTERFACE(BoseCmd)
  virtual ::android::binder::Status CallSystem(const ::android::String16& cmd, int32_t* _aidl_return) = 0;
  virtual ::android::binder::Status CallPopen(const ::android::String16& cmd, ::std::vector<int32_t>* errorCodes, ::std::vector<uint8_t>* _aidl_return) = 0;
  virtual ::android::binder::Status SendMessage(const ::std::vector<uint8_t>& message, int32_t* _aidl_return) = 0;
  virtual ::android::binder::Status GetMessage(const ::std::vector<uint8_t>& message, ::std::vector<int32_t>* errorCodes, ::std::vector<uint8_t>* _aidl_return) = 0;
};  // class IBoseCmd

class IBoseCmdDefault : public IBoseCmd {
public:
  ::android::IBinder* onAsBinder() override {
    return nullptr;
  }
  ::android::binder::Status CallSystem(const ::android::String16&, int32_t*) override {
    return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
  }
  ::android::binder::Status CallPopen(const ::android::String16&, ::std::vector<int32_t>*, ::std::vector<uint8_t>*) override {
    return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
  }
  ::android::binder::Status SendMessage(const ::std::vector<uint8_t>&, int32_t*) override {
    return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
  }
  ::android::binder::Status GetMessage(const ::std::vector<uint8_t>&, ::std::vector<int32_t>*, ::std::vector<uint8_t>*) override {
    return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
  }
};  // class IBoseCmdDefault

}  // namespace bose

}  // namespace com
